home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
021-030
/
amok21
/
popmenu
/
popmenu.def
next >
Wrap
Text File
|
1993-11-04
|
5KB
|
136 lines
(*---------------------------------------------------------------------------
:Program. PopMenu.def
:Contents. Routinen, um ein simples Auswahlmenü beim Mauszeiger
:Contents. erscheinen zu lassen.
:Author. Bernd Preusing (aus C übersetzt, angepaßt und verfeinert)
:Address. Gerhardstr. 16 D-2200 Elmshorn
:Phone. 04121/22486
:Copyright. Public Domain
:Language. Modula-2
:Translator. M2Amiga V3.2e
:Support. Helene (Lee) Taran (C-Programm Splines, Fish Disk #57)
:History. V1.0 Preusing 26-Apr-89
:Bugs. Nicht für GimmeZeroZero-Windows!
:Remark. Great, Helene!
:Remark. Das Original macht LockLayers auf irgendwas, nur nicht auf
:Remark. die betroffenen Layer, dies ist korrigiert.
---------------------------------------------------------------------------*)
DEFINITION MODULE PopMenu;
FROM SYSTEM IMPORT ADDRESS;
FROM Graphics IMPORT RastPort, ClipRect, BitMap;
FROM Exec IMPORT Byte;
FROM Intuition IMPORT WindowPtr;
CONST
FONTHEIGHT = 8; (* uses topaz.8 *)
FONTWIDTH = 8;
FONTBASELINE = 6;
NOITEMSELECTED = 0; (* returned from PopUp if no item was selected *)
OUTSIDEWINDOW = -1; (* returned from PopUp if cursor outside of window *)
TYPE
PopUpItemPtr = POINTER TO PopUpItem;
PopUpItem = RECORD
text: ADDRESS; (* text string to be displayed *)
selectionId, (* id returned when this item is selected *)
left,
top, (* top/left offset within menu *)
height,
width: INTEGER;(* desired height/width of selection box *)
color: Byte; (* desired text color (=color register) *)
next: PopUpItemPtr (* link to next menu item *)
END;
PopUpMenu = RECORD
depth, (* # of bitplanes to use *)
left, (* used internally *)
top,
height,
width: INTEGER; (* desired width of menu *)
deactivate: CARDINAL; (* what MOUSEBUTTON deactivates menu *)
outlineColor,
areaColor: Byte; (* color registers *)
cr: ClipRect; (* clipping rectangle for display *)
rp: RastPort; (* rastport for drawing into menu area*)
bitmap: BitMap; (* actual bitmap for rendering menu *)
firstItem, (* first in list of menu items *)
activeItem: PopUpItemPtr (* for internal use only! *)
END;
PROCEDURE StructPopUp(VAR Menu:PopUpMenu;
Depth:INTEGER;
oCol,
aCol:Byte);
(* :Input. Menu: die zu initialisierende Struktur
:Input. Depth: die Tiefe des Screens, auf dem das Menü
:Input. erscheinen soll
:Input. oCol: die Farbe der Umrahmung des Menüs
:Input. aCol: die Hintergrundfarbe des Menüs
:Semantic. Die Menü-Struktur wird mit den gegebenen Werten
:Semantic. initialisiert. Alle anderen Werte werden mit
:Semantic. 0 bzw. NIL vorbelegt.
:Semantic. Menu.deactivate wird auf selectUp gesetzt, d.h.
:Semantic. das Menü kann so nur mit der LINKEN Maustaste
:Semantic. aufgerufen werden. Falls man die rechte Maustaste
:Semantic. dafür benutzen möchte, muß deactivate auf menuUp
:Semantic. geändert werden und in die window.flags muß
:Semantic. rmbTrap.
*)
PROCEDURE AddItem(VAR Menu:PopUpMenu;
VAR Item:PopUpItem;
Mtext:ADDRESS;
Id:INTEGER;
Color:Byte);
(* :Input. Menu: um das es hier geht
:Input. Item: die PopUpItem-Struktur, die angehängt werden soll
:Input. MText: die Adresse des Item-Textes
:Input. Id: eine einmalige Nummer, die später von PopUp
:Input. zurückgeliefert wird. Sollte >0 sein.
:Input. Color: die Farbe des Textes
:Semantic. Das Item wird initialisiert und an des Menü an-
:Semantic. gehängt. Item.left wird auf 3, Item.top auf 1
:Semantic. gesetzt; diese Werte garantieren einen 'sauberen'
:Semantic. Menü-Aufbau, sie können aber für spezielle Effekte
:Semantic. oder z.B. zur Zentrierung des Textes noch erhöht
:Semantic. werden.
*)
PROCEDURE InitPopUp(VAR Menu:PopUpMenu);
(* :Input. Menu: eben das
:Semantic. Das Menü wird nun, nachdem alle Items angehängt
:Semantic. sind, komplett strukturiert, ein RastPort wird
:Semantic. aufgebaut und die Items und der Rahmen gezeichnet.
:Semantic. Danach kann es durch PopUp benutzt werden.
*)
PROCEDURE PopUp(VAR Menu:PopUpMenu;
window:WindowPtr):INTEGER;
(* :Input. Menu: das darzustellende Manü
:Input. window: das Fenster, in dem es gezeigt werden soll
:Output. die Id des ausgewählten Items oder NOITEMSELECTED
:Output. oder OUTSIDEWINDOW
:Semantic. Das Menü wird gezeigt, der Anwender kann mit der
:Semantic. Maus auswählen und dann die entsprechende Maustaste
:Semantic. wieder loslassen (normalerweise die linke, sonst
:Semantic. Menu.deactivate ändern!) woraufhin das Menü wieder
:Semantic. verschwindet und das id des gewählten Items
:Semantic. zurückgeliefert wird.
:Note. Das Menü wird im RastPort des Screen gezeigt, deshalb
:Note. muß vom Programmierer darauf geachtet werden, daß
:Note. es nicht größer als der Screen wird! Während der
:Note. Darstellung sind alle Layer blockiert.
*)
PROCEDURE DisposePopUp(VAR Menu:PopUpMenu);
(* :Input. Menu: das freizugebende Menü
:Semantic. Der für das Menü durch InitPopUp belegte Speicher
:Semantic. (BitPlanes) wird wieder freigegeben.
*)
END PopMenu.def